Skip to content

LAB-2 class generator solution#8

Open
quicklybly wants to merge 14 commits intoreview1from
master
Open

LAB-2 class generator solution#8
quicklybly wants to merge 14 commits intoreview1from
master

Conversation

@quicklybly
Copy link

@quicklybly quicklybly commented Oct 25, 2025

upd: показал работу 31.10

Классы из задания покрыты тестами, есть ряд недочетов, которые не покрываются в базовых классах, например, нет поддержки SortedSet, а также при достижении потолка рекурсии в примитиве должна быть ошибка (проставляю null, а примитив не может быть null), но как и упоминалось в задании полное покрытие и не требуется

Автор: Лысенко Артем Русланович

return values[random.nextInt(values.length)];
}

private Collection<Object> generateCollectionFromClass(Class<?> collectionClass) {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Напомните пж, почему мы тут не делаем также, как и в fromField варианте:
if (genericType instanceof ParameterizedType parameterizedType

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

В рантайме тип generic'а стирается

Демонстрация:

Попробуем воспроизвести этот код в метода generateCollectionFromClass для Cart.java

        Type genericType = collectionField.getGenericType();
        Collection<Object> collection = generateCollectionFromClass(collectionField.getType());

        if (genericType instanceof ParameterizedType parameterizedType) {
            Type[] typeArgs = parameterizedType.getActualTypeArguments();

            // if not generic, then fill
            if (typeArgs.length == 1 && typeArgs[0] instanceof Class<?> elementType) {
                int length = random.nextInt(1, 10);

                for (int i = 0; i < length; ++i) {
                    Object element = generateValueOfType(elementType, depth + 1);
                    collection.add(element);
                }
            }
        }
  1. При использовании List instanceof ParameterizedType false
  2. Попробуем объявить поле items ArrayList -> false, пытаемся достать generic через getGenericSuperClass -> получаем E, с верхней границей Object. (можно достать getGenericInfo прямо у List, но результат будет аналогичный)
Image Image Image Image

Теперь посмотрим на Field

Класс знает, что тип поля не изменится и может сохранить значение generic'а у себя в метаинформации, на скрине видно, что эта информация легко доступна

Image Image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

Comments